package com.xinqi.modules.databank.v2.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinqi.common.mybatis.data.repo.SuperMapper;
import com.xinqi.modules.databank.dto.req.*;
import com.xinqi.modules.databank.dto.rsp.*;
import com.xinqi.modules.databank.v2.domain.CourseResourceEntity;
import com.xinqi.modules.stats.assistant.dto.rsp.AssistantTotalResultDTO;
import com.xinqi.modules.stats.assistant.dto.rsp.StudentInfoResultDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 课程资料库主表数据层
 * @author: dzy
 * @date: 2023/07/14
 */
@Mapper
public interface CourseResourceBaseMapper extends SuperMapper<CourseResourceEntity> {

    IPage<CourseResourceBaseResultDTO> pageList(IPage<CourseResourceBaseResultDTO> page,@Param("query") ResourceBaseQueryDTO queryDTO);

    ResourceResponseDTO getResourceInfo(@Param("contentId") Long contentId);

    List<ResourceStatisticsDTO> resourceStatistics(ResourceQueryDTO resourceQueryDTO);

    List<Map<String, Object>> selectDoubtResourceParUrl(@Param("contentId") Long contentId);

    List<Map<String, Object>> selectQuizResourceParUrl(@Param("contentId") Long contentId);

    String selectAvatar(@Param("userId") Long userId);

    String selectNickname(@Param("userId") Long userId);

    IPage<CourseResourceBaseResultDTO> teacherPageList(IPage<CourseResourceBaseResultDTO> page, @Param("queryDTO") ResourceBaseQueryDTO queryDTO);

    IPage<CourseResourceBaseResultDTO> teacherReleasePageList(IPage<CourseResourceBaseResultDTO> page, @Param("queryDTO") ResourceBaseQueryDTO queryDTO);

    List<Map<String, Object>> studentGetSlice(@Param("contentId") Long contentId, @Param("studentId") Long studentId);

    String selectChapterName(@Param("chapterId") Long chapterId);

    List<CourseResourceEntity> selectEndVideos();

    List<CourseResourceEntity> selectByRunnings(@Param("classId") Long classId);

    List<CourseResourceEntity> selectByNotEndings(@Param("classId") Long classId);

    /**
     * 资料库学习未学习总统计
     */
    AssistantTotalResultDTO selectResourceTakeTotal(@Param("contentId") Long contentId, @Param("type") Integer type);

    /**
     * 资料库学习未学习学生列表
     */
    List<StudentInfoResultDTO> selectResourceTakeStudent(@Param("contentId") Long contentId, @Param("type") Integer type, @Param("studyStatus") Integer studyStatus);


    int updateStatusBatchRelease(@Param("ids") List<Long> ids);

    Boolean updatePublishById(@Param("id") Long id);

    CourseResourceEntity selectViewDataById(@Param("id") Long id);

    /**
     * 更新发布时间为空
     */
    int updateReleaseTimeNull(@Param("id") Long id);

    /**
     * 查询进行中的互动课件
     * @param classId 班级ID
     * @return List<CourseResourceEntity> 进行中的互动课件数据
     */
    List<CourseResourceEntity> selectRunningCourseWare(Long classId);

}
